package com.example.myspringboot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @author cy
 * @date 2024/6/21
 */
@Configuration
public class RedisConfig {

    /**
     * 创建RedisTemplate实例，用于操作Redis数据库。
     * 该方法配置了字符串类型的键和值的序列化方式，确保数据在Java和Redis之间的正确转换。
     *
     * @param factory RedisConnectionFactory的实例，用于创建与Redis服务器的连接。
     * @return RedisTemplate实例，配置了字符串类型的键和值的序列化方式。
     */
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        // 使用StringRedisSerializer对键进行序列化
        // 设置键（Key）的序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        // 使用StringRedisSerializer对值进行序列化
        // 设置值（Value）的序列化方式
        template.setValueSerializer(new StringRedisSerializer());

        // 使用StringRedisSerializer对Hash的键进行序列化
        // 设置Hash key的序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        // 使用StringRedisSerializer对Hash的值进行序列化
        // 设置Hash value的序列化方式
        template.setHashValueSerializer(new StringRedisSerializer());

        // 初始化RedisTemplate的属性
        template.afterPropertiesSet();
        return template;
    }


}
